<?php

/**
 * Description of Task_Item
 *
 * @author prometheus
 */
abstract class Task_Item extends x10_GeneralClass
{
	/**
	 * @var Task_ItemProvider
	 */
	protected $provider;

	/**
	 * Az aktuálisan kiválasztott megjelenítő.
	 * @var XDD_Provider
	 */
	protected $activeDisplay;

	/**
	 * A sikeresen visszatérő útvonalválasztó.
	 * @var UAL_Router
	 */
	protected $selectedRouter;

	/**
	 * Felhasználó által megadott akció paraméterek (csak akció végrehajtásakor),
	 * @var Array
	 */
	protected $parameters = array();

	/**
	 * @var Task
	 */
	protected $parent;

	/**
	 * @var UAL_Request
	 */
	protected $request;

	/**
	 * A felhasználó által megadott argumentumok (pl. HTTP paraméterek).
	 * @var Array
	 */
	protected $userArguments = array();

	public function __construct(x10_Config $config=NULL)
	{
		parent::__construct($config);

		$this->stateMan = x10::dedicate('x10_StateManager');
		$this->request = x10::dedicate('UAL_Request');

		$this->userArguments = $this->request[$this->request->method]->get()->arguments;
	}

/////////////////////////////////////////////////////////////////
// Task_Application
	/**
	 * Visszatér az (al)alkalmazás elemnevének megfelelő standard osztálynévvel.
	 * Az elemhez a szülői ágon legközelebb eső alkalmazás fogja visszaadni
	 * ezt az értéket.
	 * @param String $application
	 * @return String
	 */
	public function getStdAppClassName($application)
	{
		return $this->parent->getStdAppClassName($application);
	}

	/**
	 * Visszatér a taszk elemnevének megfelelő standard osztálynévvel.
	 * Az elemhez a szülői ágon legközelebb eső alkalmazás fogja visszaadni
	 * ezt az értéket.
	 * @param String $task
	 * @return String
	 */
	public function getStdTaskClassName($task)
	{
		return $this->parent->getStdTaskClassName($task);
	}

	/**
	 * Visszatér a taszk egy akciójának elemneve szerint alkotott standard
	 * osztály nevével.
	 * Az elemhez a szülői ágon legközelebb eső alkalmazás fogja visszaadni
	 * ezt az értéket.
	 * @param String $task
	 * @param String $action
	 * @return String
	 */
	public function getStdActionClassName($task, $action)
	{
		return $this->parent->getStdActionClassName($task, $action);
	}
// Task_Application
/////////////////////////////////////////////////////////////////

	/**
	 * Ha a taszk elemként van használva egy másik taszk listájában, ezzel
	 * a metódussal kell beállítani a hozzátartozó elemszolgáltatót.
	 * @param Task_ItemProvider $provider
	 */
	public function setProvider(Task_ItemProvider $provider)
	{
		$this->provider = $provider;
	}

	/**
	 * @return Task_ItemProvider
	 */
	public function getProvider()
	{
		return $this->provider;
	}

	/**
	 * Ha a taszk elemként van használva egy másik taszk listájában, ezzel
	 * a metódussal lehet beállítani a taszkhoz tartozó felhasználói
	 * argumentumokat.
	 * @param Array $arguments
	 */
	public function setUserArguments($arguments)
	{
		$this->userArguments = $arguments;
	}

	/**
	 * Beállítja a taszk gyakorlati szülőjét, azaz azt az objektumot, amelyik a
	 * taszkot létrehozta.
	 * @param Task $parent
	 */
	public function setParent($parent)
	{
		$this->parent = $parent;
	}

	/**
	 * Visszatér a taszkot létrehozó objektummal.
	 * @return Task
	 */
	public function getParent()
	{
		return $this->parent;
	}

	/**
	 * A végrehajtási kód helye.
	 * Abban az esetben kerülhet meghívásra, ha a taszk maga is akció.
	 */
	public function action()
	{

	}
}

?>